#include <stdio.h>
#include <string.h>

int up[10005]; 
int down[10005];
int p1, p2;
double ans;
int p, q, r, s, top;

void check()
{
	int i;
		for (i=1; i<=top; ++i)
			printf("%d ", up[i]);
		printf("\n");
		for (i=1; i<=top; ++i)
			printf("%d ", down[i]);
		printf("\n\n");

}
int main()
{

	int i, j;
	while (scanf("%d%d%d%d", &p, &q, &r, &s)==4)
	{
		memset(up, 0, sizeof(up));
		memset(down, 0, sizeof(down));
		top = 0;
		if (top<p) top = p;
		if (top<r) top = r;

		for (i=1; i<=p; ++i) up[i] ++;
		for (i=1; i<=s; ++i) up[i] ++;
		j = r-s;
		for (i=1; i<=j; ++i) up[i] ++;

		for (i=1; i<=q; ++i) down[i] ++;
		for (i=1; i<=r; ++i) down[i] ++;
		j = p - q;
		for (i=1; i<=j; ++i) down[i] ++;

//		check();

		for (i=1; i<=top; ++i)
			if (up[i] && down[i])
			{
				if (up[i] < down[i]) 
				{
					down[i] -= up[i];
					up[i] = 0;
				}
				else
				{
					up[i] -= down[i];
					down[i] = 0;
				}
			}

//		check();

		ans = 1;
		p1 = 1;
		p2 = 1;
		while (up[p1]==0 && p1<=top) p1++;
		while (down[p2]==0 && p2<=top) p2++;
	
		while (p1<=top || p2<=top)
		{
			if (ans <=100000000 && p1<=top)
			{
				ans *= p1;
				up[p1] --;
				while (up[p1]==0 && p1<=top) p1++;
			}
			else 
			{
				ans /= p2;
				down[p2] --;
				while (down[p2]==0 && p2<=top) p2++;
			}
		}

		printf("%.5lf\n", ans); 



		
	}

	return 0;
}	
